#include "../common/Random.h"
#include "../logger/logger.h"
#include "../application/AdpAPI.h"
#include "../middleware/CommunicationADP.h"
#include "../common/Argv.h"

int main(int argc, char** argv){
	CLogger::create("Almacen De Piezas");
	CLogger::setLevel(LogLevelEnum::TRACE);
	CLogger::log("Empieza a simular.", LogLevelEnum::INFO);
	Argv args(argv);
	if (args.getArgc() < 2) {
		CLogger::log("Parámetros inválidos. Uso: ./adp hostName", LogLevelEnum::FATAL);
		exit(1);
	}

	AdpAPI adpAPI(args.getArg(1));
	while(true){
		CLogger::log("Esperando orden de compra", LogLevelEnum::INFO);
		CLogger::log("Toque una tecla para generar una orden de compra", LogLevelEnum::INFO);
		char a;
		cin >> a;

//		ProductoCantidad pc = adpAPI.obtenerProductoAProducir();
		ProductoCantidad pc;
		pc.tipo = Random::randomInt(1,2);
		pc.cantidad = 10;

		if (adpAPI.sePuedeEnviarAProducir()) {
			CLogger::log(
				"Envio a producir " + StringUtils::itos(pc.cantidad) +
				" productos de tipo " + StringUtils::itos(pc.tipo),
				LogLevelEnum::INFO
			);
			PedidoPiezas piezas;
			for(int i=0;i<MAX_PIEZAS;i++){
				piezas.piezas[i]=0;
			}
			ProductoPiezasMap map = MapaPiezasProducto::obtenerPiezasYCantidad(pc.tipo);
			ProductoPiezasMap::iterator it;
			int i=0;
			for (it = map.begin(); it != map.end(); it++) {
				std::cout << "Pieza " << it->first<< std::endl;
				piezas.piezas[i] = it->first;
				i++;
			}
					
			//adpAPI.pedirCanastos(piezas);
			//sleep(5);
			adpAPI.enviarAProducir(pc.tipo, pc.cantidad);
		}
	}

	return 0;
}

